﻿//using SmartWMS.Common.Extensions;
//using SmartWMS.Common.ResponseOutput;
//using SmartWMS.Domain.BasicsDatum;
//using SmartWMS.Domain.WarehouseManage;
//using SmartWMS.EntityFramework;

//namespace SmartWMS.Server.WarehouseManage.TransferManagementService
//{
//	public class TransferManagement : ITransferManagementService
//	{
//        private readonly SmartWMSContext _context;

//        public TransferManagement(SmartWMSContext context)
//        {
//            _context = context;
//        }

//        public Response<bool> AddAllotDto(AddAllotDto info)
//        {

//            var AllotDto = info.MapTo<Allot>();
//            AllotDto.Audittime = null;
//            AllotDto.State = 0;
//            var AllotDtoItemList = info.AllotDtoItemList.MapToList<AllotItem>();
//            //循环AllotDtoItemList
//            foreach (var item in AllotDtoItemList)
//            {
//                item.AllotCode = AllotDto.AllotCode;
//            }
//            //开启事务
//            using (var tran = _context.Database.BeginTransaction())
//            {
//                try
//                {
//                    _context.Allot.Add(AllotDto);
//                    _context.SaveChanges();
//                    _context.AllotItem.AddRange(AllotDtoItemList);
//                    _context.SaveChanges();
//                    tran.Commit();
//                    return Response<bool>.Ok(true);
//                }
//                catch (Exception ex)
//                {
//                    tran.Rollback();
//                    return Response<bool>.Fail(ex.Message);
//                }
//            }
//        }

//        public Response<bool> DeleteAllotDto(AddAllotDto info)
//        {

//            var AllotDtoItem = _context.AllotItem.Find(info.Id);
//            var list = _context.AllotItem.Where(m => m.AllotCode == AllotDtoItem.AllotCode).ToList();

//            //开启事务
//            using (var tran = _context.Database.BeginTransaction())
//            {
//                try
//                {
//                    _context.AllotItem.Remove(AllotDtoItem);
//                    _context.SaveChanges();
//                    if (list.Count == 1)
//                    {
//                        var allInfo = list.FirstOrDefault(m => m.AllotCode == AllotDtoItem.AllotCode);
//                        var AllotDto = _context.Allot.FirstOrDefault(m => m.AllotCode == allInfo.AllotCode);
//                        _context.Allot.Remove(AllotDto);
//                        _context.SaveChanges();
//                    }
//                    tran.Commit();
//                    return Response<bool>.Ok(true);
//                }
//                catch (Exception ex)
//                {
//                    tran.Rollback();
//                    return Response<bool>.Fail(ex.Message);
//                }
//            }
//        }

//        public Response<bool> ExamineAllotDto(AddAllotDto info)
//        {
//            var allotDto = _context.Allot.FirstOrDefault(m => m.AllotCode == info.AllotCode);
//            allotDto.Reviewer = info.Reviewer;
//            allotDto.State= (int)info.State;
//            allotDto.Audittime = DateTime.Now;
//            if (allotDto.State == 3) {
//                _context.Allot.Update(allotDto);
//                _context.SaveChanges();
//                return Response<bool>.Ok(true);
//            }
//            var AllotItemDto = _context.AllotItem.Where(m => m.AllotCode == info.AllotCode);

//            var productlist = _context.Product.ToList();
//            List<Product> examineproductlist = new List<Product>();
//            //循环AllotDtoItemList
//            foreach (var item in AllotItemDto)
//            {
//                examineproductlist = productlist.Where(m => m.ProductCode == item.ProductCode).ToList();

//                foreach (var product in examineproductlist)
//                {
//                    product.DefaultLocationId = item.NewOriginallocationId;
//                    product.DefaultWarehouseId = item.MoveWarehouseId;
//                    product.Inventory -= item.Number;
//                }
//            }

//            //开启事务
//            using (var tran = _context.Database.BeginTransaction())
//            {
//                try
//                {
//                    _context.Allot.Update(allotDto);
//                    _context.SaveChanges();
//                    _context.Product.UpdateRange(examineproductlist);
//                    var result = _context.SaveChanges();
//                    tran.Commit();
//                    return Response<bool>.Ok(true);
//                }
//                catch (Exception ex)
//                {
//                    tran.Rollback();
//                    return Response<bool>.Fail(ex.Message);
//                }
//            }

//        }

//        public Response<List<AllotDto>> GetAllotDtoList(SerchData info)
//        {
//            var list = (from allot in _context.Allot
//                        join allotItem in _context.AllotItem on allot.AllotCode equals allotItem.AllotCode
//                        join product in _context.Product on allotItem.ProductCode equals product.ProductCode
//                        join ywarehouse in _context.Warehouse on allotItem.WarehouseId equals ywarehouse.Id
//                        join ylocation in _context.Location on allotItem.OriginallocationId equals ylocation.Id
//                        join dwarehouse in _context.Warehouse on allotItem.MoveWarehouseId equals dwarehouse.Id
//                        join dlocation in _context.Location on allotItem.NewOriginallocationId equals dlocation.Id
//                        select new AllotDto
//                        {
//                            Id = allotItem.Id,
//                            AllotCode = allot.AllotCode,
//                            ProductName = product.ProductName,
//                            Audittime = (DateTime)allot.Audittime,
//                            Creator = allot.Creator,
//                            CreatorTime = allot.CreatorTime,
//                            MoveOriginallocationName = dlocation.LocationName,
//                            MoveWarehouseName = dwarehouse.Name,
//                            Number = allotItem.Number,
//                            OriginallocationName = ylocation.LocationName,
//                            Opinion = allot.Opinion,
//                            ProductCode = product.ProductCode,
//                            Remarks = allot.Remarks,
//                            Reviewer = allot.Reviewer,
//                            State = allot.State,
//                            Unit = product.Unit,
//                            WarehouseName = ywarehouse.Name,
//                            MoveOriginallocationId = dlocation.Id,
//                            MoveWarehouseId = dwarehouse.Id,
//                            OriginallocationId = ylocation.Id,
//                            WarehouseId = ywarehouse.Id,
//                        }).ToList();
//            if (info.AllotCode != "")
//            {
//                list = list.Where(m => m.AllotCode.Contains(info.AllotCode)).ToList();
//            }
//            if (info.CreatorTime.ToString() != "")
//            {
//                list = list.Where(m => m.CreatorTime == info.CreatorTime).ToList();
//            }
//            if (info.State != null)
//            {
//                list = list.Where(m => m.State == info.State).ToList();
//            }
//            list = list.OrderBy(m => m.Id).ToList();
//            int totalCount = list.Count;
//            int pageCount = (int)Math.Ceiling((decimal)(totalCount * 1.0 / info.PageSize));
//            list = list.Skip((int)((info.PageIndex - 1) * info.PageSize)).Take((int)info.PageSize).ToList();
//            var result = list.MapToList<AllotDto>();
//            return Response<List<AllotDto>>.Ok(result, totalCount, pageCount);
//            throw new NotImplementedException();
//        }

//        public Response<List<WarehouseDto>> GetAWarehouseDtoList()
//        {
//            var list = _context.Warehouse.ToList();
//            var result = list.MapToList<WarehouseDto>();
//            return Response<List<WarehouseDto>>.Ok(result);
//        }

//        public Response<List<LocationDto>> GetLocationDtoList(SerchData info)
//        {
//            if (info.Id != null)
//            {
//                var list = _context.Location.Where(m => m.WarehouseId == info.Id).ToList();
//                var result = list.MapToList<LocationDto>();
//                return Response<List<LocationDto>>.Ok(result);
//            }
//            else
//            {

//                return Response<List<LocationDto>>.Fail("");
//            }

//        }

//        public Response<List<LocationDto>> GetLocationDtoList(int id)
//        {
//            throw new NotImplementedException();
//        }
//    }
//}
